assume cs:code
a segment
    db 1,2,3,4,5,6,7,8
a ends
b segment
    db 1,2,3,4,5,6,7,8
b ends
cz segment
    db 0,0,0,0,0,0,0,0
cz ends

code segment
start:
    mov ax,a
    mov ds,ax ;ds指向a段

    mov ax,b
    mov es,ax ;es指向b段

    mov bx,0  ;累加计数器，作用是提供位置坐标
    mov cx,8  ;循环计数器，用户是循环数据
s:  
    mov dl,[bx] ;获取a段的数据，将低8位放到(dl)=((ds)*16 + (bx))
    add dl,es:[bx] ;获取b段的数据，将数据相加放到(dl)=((dl)+(es)* 16 + (bx))  
    push ds     ;保护ds值，因为下面用到ds了，
    
    mov ax,cz    ;获取c段地址
    mov ds,ax   ;ds执行c段
    mov [bx],dl ;((ds) * 16 + bx) = (dl)
    
    pop ds      ;将ds恢复到原来的值
    inc bx      ;bx 等增
    loop s

    mov ax,4c00h
    int 21h

code ends
end start